package org.robot.scm.pojos.config.base;

import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.robot.scm.pojos.platform.server.SshMySql;
import org.robot.scm.pojos.proxy.ProxyInfo;
import org.robot.scm.utils.StreamUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author : Awn create on 2023/10/20 14:58
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BasePlatform {

    private static final Logger log = LoggerFactory.getLogger(BasePlatform.class);
    /**
     * 平台配置名称
     */
    private String platformName;

    /**
     * 通知标题
     */
    private String noticeTitle;

    /**
     * 通知数据获取频率
     */
    private int checkSeconds;

    /**
     * 通知源，请求源
     */
    private String noticeSrc;

    /**
     * 单独设置代理
     */
    private ProxyInfo proxyInfo;

    /**
     * 通知明细地址
     */
    private String noticeDetail;

    /**
     * bark通知图标
     */
    private String iconUrl;

    /**
     * 部分通知源所需的授权码，如三诺
     */
    private String token;

    /**
     * 标准血糖区间
     */
    private List<Double> normalBloodLevel;

    /**
     * 血糖播放提醒声音
     */
    private boolean playSound;

    /**
     * 平台的关键词触发
     */
    private List<String> keywords;

    /**
     * 截图使用的 chrome driver
     */
    private String driverPath;

    /**
     * 截图使用的 chrome path
     */
    private String chromePath;

    /**
     * 机器人监听消息是否需要@我
     */
    private Boolean needAtMe;

    /**
     * wxId 机器人用
     */
    private String wechatId;


    /**
     * Redis最大连接数，包括使用中的和空闲的
     */
    private int maxTotal;

    /**
     * Redis最大空闲连接数，达到此数量后，额外的连接将会被释放，而不是等待闲置
     */
    private int maxIdle;

    /**
     * Redis最小空闲连接数，连接池至少应保持的数量，即使没有使用中的连接
     */
    private int minIdle;

    /**
     * MySql-SSH
     */
    @Getter(value = AccessLevel.NONE)
    private BaseSshMysql sshMysql;

    /**
     * thrower接受指定消息打电话
     */
    private String callVoIp;


    /**
     * 电报相关
     */
    private Long telegramId;
    private String phoneNumber;
    private Integer appId;
    private String apiHash;
    private String sockProxy;

    /**
     * 定时任务相关
     */
    private List<BaseSchedule> cronConfig;

    public SshMySql getSshMysql(String aws) {
        return StreamUtils.filterOne(getSshMysqlDetails(), e -> StringUtils.equals(e.getName(), aws));
    }

    public List<SshMySql> getSshMysqlDetails() {
        return StreamUtils.convert(sshMysql.getSshDetail(), e -> SshMySql.builder()
                .sshHost(StringUtils.isNotBlank(e.getSshHost()) ? e.getSshHost() : sshMysql.getSshHost())
                .sshPort(e.getSshPort())
                .sshUser(StringUtils.isNotBlank(e.getSshUser()) ? e.getSshUser() : sshMysql.getSshUser())
                .sshPwd(e.getSshPwd())
                .sshFwdPort(e.getSshFwdPort())
                .sshFwdHost(StringUtils.isNotBlank(e.getSshFwdHost()) ? e.getSshFwdHost() : sshMysql.getSshFwdHost())
                .mysqlUser(sshMysql.getMysqlUser())
                .mysqlPass(StringUtils.isNotBlank(e.getMysqlPass()) ? e.getMysqlPass() : sshMysql.getMysqlPass())
                .name(e.getName())
                .prvKey(e.getPrvKey())
                .prvPass(e.getPrvPass())
                .maximumPoolSize(sshMysql.getMaximumPoolSize())
                .minimumIdle(sshMysql.getMinimumIdle())
                .build());
    }
}
